#ifndef __LOGGER_HPP__
#define __LOGGER_HPP__

#include "../include/log4cpp/Category.hh"

using namespace log4cpp;

class Logger
{
public:
    static Logger *getInstance();
    static void destroy();

    void warn(const char *msg);
    void error(const char *msg);
    void debug(const char *msg);
    void info(const char *msg);

private:
    Logger();
    ~Logger();

private:
    static Logger *_pInstance;
    Category &_mycat;
};


#define prefix(msg) (string(__FILE__) + string(":") \
                    + string(__FUNCTION__) + string(":") \
                    + string(std::to_string(__LINE__)) \
                    + string(":") + msg).c_str()

#define logError(msg) Logger::getInstance()->error(prefix(msg))
#define logInfo(msg) Logger::getInstance()->info(prefix(msg))
#define logWarn(msg) Logger::getInstance()->warn(prefix(msg))
#define logDebug(msg) Logger::getInstance()->debug(prefix(msg))

#endif
